/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gbvbahia.projeto.web;

import br.com.gbvbahia.projeto.service.AuthenticationService;
import br.com.gbvbahia.projeto.web.jsfutil.JsfUtil;
import br.com.gbvbahia.utils.MensagemUtils;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author Guilherme
 */
@ManagedBean
@RequestScoped
public class LoginController implements Serializable {

    /**
     * Bean de autenticação.
     */
    @ManagedProperty("#{authenticationService}")
    private AuthenticationService authenticationService;
    /**
     * Login informado pelo usuário.
     */
    private String nome;
    /**
     * Senha informada pelo usuário.
     */
    private String senha;

    /**
     * Recupera o login.
     *
     * @return Login.
     */
    public String getNome() {
        return nome;
    }

    /**
     * Altera o logn.
     *
     * @param vNome Informado pelo usuário.
     */
    public void setNome(final String vNome) {
        this.nome = vNome;
    }

    /**
     * Recupera a senha digitada.
     *
     * @return Senha.
     */
    public String getSenha() {
        return senha;
    }

    /**
     * Altera a senha de validação.
     *
     * @param vSenha Senha.
     */
    public void setSenha(final String vSenha) {
        this.senha = vSenha;
    }

    /**
     * Inicia o processo de atenticação do usuário.
     *
     * @return Fluxo de navegação para login correto ou errado.
     */
    public String logar() {
        boolean sucesso = authenticationService.login(nome, senha);
        if (!sucesso) {
            MensagemUtils.messageFactoringFull("loginInvalido", null,
                    FacesMessage.SEVERITY_WARN,
                    FacesContext.getCurrentInstance());
            return JsfUtil.MANTEM;
        }
        return JsfUtil.PAGES_PRINCIPAL;
    }

    /**
     * Sai do sistema, matando a sessão e retornando para página de
     * login.
     *
     * @return JsfUtil.LOGIN_PAGE
     */
    public String logout() {
        authenticationService.logout();
        return JsfUtil.LOGIN_PAGE;
    }

    /**
     * Utilizado para injetar o AuthenticationService pelo Spring.
     *
     * @param aut Quem realiza a autenticação.
     */
    public void setAuthenticationService(final AuthenticationService aut) {
        this.authenticationService = aut;
    }

    /**
     * Recupera o autenticador.
     * @return Autenticador.
     */
    public AuthenticationService getAuthenticationService() {
        return authenticationService;
    }
    
    
}
